package view.usuarios;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Calendar;

import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import model.Instructor;
import model.PersonalAdministrativo;
import model.Tipo_Empleado;
import model.Usuario;
import model.comunication.IInstructor;
import model.comunication.IPersonalAdministrativo;
import model.comunication.IUsuario;

import com.toedter.calendar.JDateChooser;

public class RegistrarUsuario {

	/**
	 * 
	 */
	private JFrame frmRegistrarUsuario;
	private JTextField textNombre;
	private JTextField textApellido;
	private JTextField textDireccion;
	private JTextField textTelefono;
	private JTextField textCelular;
	private JRadioButton rdbtnSupervisor;
	private JRadioButton rdbtnPersonalAdministrativo;
	private JDateChooser dateFechaNac;
	private JLabel lblTipo;
	private final ButtonGroup rdbuttonGroup = new ButtonGroup();
	private JLabel lblDatos;
	private IPersonalAdministrativo cmmPersonalAdmin;
	private IInstructor cmmInstructor;
	private IUsuario cmmUsuario;
	private JTextField textDni;
	private JLabel lblDni;
	private JRadioButton rdbtnInstructor;
	private JLabel lblErrorCampoObli;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					RegistrarUsuario window = new RegistrarUsuario();
					window.frmRegistrarUsuario.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public RegistrarUsuario() {
		cmmInstructor = IInstructor.getInstance();
		cmmPersonalAdmin = IPersonalAdministrativo.getInstance();
		cmmUsuario = IUsuario.getInstance();
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frmRegistrarUsuario = new JFrame();
		frmRegistrarUsuario.setVisible(true);
		frmRegistrarUsuario.setTitle("Registrar Usuario");
		frmRegistrarUsuario.setBounds(100, 100, 473, 387);
		frmRegistrarUsuario.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frmRegistrarUsuario.getContentPane().setLayout(null);

		JLabel lblNombre = new JLabel("Nombre:     *");
		lblNombre.setBounds(10, 27, 73, 22);
		frmRegistrarUsuario.getContentPane().add(lblNombre);

		JLabel lblApellido = new JLabel("Apellido:     *");
		lblApellido.setBounds(10, 59, 73, 22);
		frmRegistrarUsuario.getContentPane().add(lblApellido);

		JLabel lblTelefono = new JLabel("Telefono:    *");
		lblTelefono.setBounds(10, 158, 73, 22);
		frmRegistrarUsuario.getContentPane().add(lblTelefono);

		JLabel lblDireccion = new JLabel("Direccion:  *");
		lblDireccion.setBounds(10, 125, 73, 22);
		frmRegistrarUsuario.getContentPane().add(lblDireccion);

		JLabel lblFechaDeNacimiento = new JLabel("Fecha de Nacimiento:    *");
		lblFechaDeNacimiento.setBounds(10, 225, 150, 22);
		frmRegistrarUsuario.getContentPane().add(lblFechaDeNacimiento);

		JLabel lblCelular = new JLabel("Celular:       *");
		lblCelular.setBounds(10, 192, 73, 22);
		frmRegistrarUsuario.getContentPane().add(lblCelular);

		textNombre = new JTextField();
		textNombre.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textNombre.setBounds(80, 27, 176, 22);
		frmRegistrarUsuario.getContentPane().add(textNombre);
		textNombre.setColumns(10);

		textApellido = new JTextField();
		textApellido.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textApellido.setColumns(10);
		textApellido.setBounds(80, 59, 176, 22);
		frmRegistrarUsuario.getContentPane().add(textApellido);

		textDireccion = new JTextField();
		textDireccion.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textDireccion.setColumns(10);
		textDireccion.setBounds(80, 125, 176, 22);
		frmRegistrarUsuario.getContentPane().add(textDireccion);

		textTelefono = new JTextField();
		textTelefono.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textTelefono.setColumns(10);
		textTelefono.setBounds(80, 158, 176, 22);
		frmRegistrarUsuario.getContentPane().add(textTelefono);

		textCelular = new JTextField();
		textCelular.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textCelular.setColumns(10);
		textCelular.setBounds(80, 192, 176, 22);
		frmRegistrarUsuario.getContentPane().add(textCelular);

		dateFechaNac = new JDateChooser();
		dateFechaNac.getCalendarButton().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		dateFechaNac.setDateFormatString("yyyy/MM/dd");
		dateFechaNac.setBounds(149, 225, 127, 20);
		frmRegistrarUsuario.getContentPane().add(dateFechaNac);

		lblTipo = new JLabel("Tipo:");
		lblTipo.setBounds(10, 253, 73, 22);
		frmRegistrarUsuario.getContentPane().add(lblTipo);

		rdbtnPersonalAdministrativo = new JRadioButton("PersonalAdministrativo");
		rdbtnPersonalAdministrativo.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		rdbuttonGroup.add(rdbtnPersonalAdministrativo);
		rdbtnPersonalAdministrativo.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if (rdbtnSupervisor.isSelected() == true) {
					rdbtnSupervisor.setSelected(false);
				}
			}
		});
		rdbtnPersonalAdministrativo.setBounds(46, 254, 176, 23);
		frmRegistrarUsuario.getContentPane().add(rdbtnPersonalAdministrativo);

		rdbtnSupervisor = new JRadioButton("Supervisor");
		rdbtnSupervisor.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		rdbuttonGroup.add(rdbtnSupervisor);
		rdbtnSupervisor.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if (rdbtnPersonalAdministrativo.isSelected() == true) {
					rdbtnPersonalAdministrativo.setSelected(false);
				}
			}
		});


		rdbtnSupervisor.setBounds(224, 252, 93, 23);
		frmRegistrarUsuario.getContentPane().add(rdbtnSupervisor);

		lblDatos = new JLabel("Datos______________________________________________________________");
		lblDatos.setEnabled(false);
		lblDatos.setBounds(10, 0, 473, 22);
		frmRegistrarUsuario.getContentPane().add(lblDatos);

		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				frmRegistrarUsuario.dispose();
			}
		});
		btnCancelar.setBounds(205, 315, 89, 23);
		frmRegistrarUsuario.getContentPane().add(btnCancelar);

		JButton btnRegistrar = new JButton("Registrar");
		btnRegistrar.addActionListener(new ActionListener() {
			@SuppressWarnings("static-access")
			public void actionPerformed(ActionEvent e) {
				String nombre = textNombre.getText();
				String apellido = textApellido.getText();
				String email = textDireccion.getText();
				String telefono = textTelefono.getText();
				String celular = textCelular.getText();
				Calendar nacimiento = (Calendar) dateFechaNac.getCalendar();
				String DNI = textDni.getText();
				Usuario user = null;

				if (estaVacio(nombre) && nacimiento != null && estaVacio(apellido) && estaVacio(email) && estaVacio(telefono) && estaVacio(celular) && estaVacio(DNI)) {// revisa si los campos no estan
																																										// vacios
					PersonalAdministrativo personal = null;
					Tipo_Empleado tipoEmpl = null;

					if (rdbtnPersonalAdministrativo.isSelected()) {
						user = new Usuario(nombre.charAt(0) + "" + apellido, DNI, "Personal Admin");
						int idUser = cmmUsuario.addUsuario(user);
						personal = new PersonalAdministrativo(nombre, apellido, email, telefono, celular, nacimiento, DNI, tipoEmpl.PersonalAdministrativo, "no", idUser);
						cmmPersonalAdmin.addPersonalAdministrativo(personal);
					}

					else if (rdbtnSupervisor.isSelected()) {
						user = new Usuario(nombre.charAt(0) + "" + apellido, DNI, "Supervisor");
						int idUser = cmmUsuario.addUsuario(user);
						personal = new PersonalAdministrativo(nombre, apellido, email, telefono, celular, nacimiento, DNI, tipoEmpl.Supervisor, "no", idUser);
						cmmPersonalAdmin.addPersonalAdministrativo(personal);
					}

					else if (rdbtnInstructor.isSelected()) {
						user = new Usuario(nombre.charAt(0) + "" + apellido, DNI, "Instructor");
						int idUser = cmmUsuario.addUsuario(user);
						Instructor instructor = new Instructor(nombre, apellido, email, telefono, celular, nacimiento, DNI, "no", idUser);
						cmmInstructor.addInstructor(instructor);
					}
					// AltaUsuario altUsuario= new AltaUsuario();
					// altUsuario.setVisible(true);
					// if(user!=null)
					// cmmUsuario.updateUsuario(user);

					frmRegistrarUsuario.dispose();
					EmpleadoNuevo empNuevo = new EmpleadoNuevo();

				} else {
					lblErrorCampoObli.setVisible(true);
				}

			}
		});

		btnRegistrar.setBounds(339, 315, 89, 23);
		frmRegistrarUsuario.getContentPane().add(btnRegistrar);

		lblDni = new JLabel("D.N.I:            *");
		lblDni.setBounds(10, 92, 73, 22);
		frmRegistrarUsuario.getContentPane().add(lblDni);

		textDni = new JTextField();
		textDni.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		textDni.setColumns(10);
		textDni.setBounds(80, 92, 176, 22);
		frmRegistrarUsuario.getContentPane().add(textDni);

		rdbtnInstructor = new JRadioButton("Instructor");
		rdbtnInstructor.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				lblErrorCampoObli.setVisible(false);
			}
		});
		rdbuttonGroup.add(rdbtnInstructor);
		rdbtnInstructor.setBounds(319, 253, 109, 23);
		frmRegistrarUsuario.getContentPane().add(rdbtnInstructor);

		lblErrorCampoObli = new JLabel("No completo los campos obligatorios");
		lblErrorCampoObli.setVisible(false);
		lblErrorCampoObli.setForeground(Color.RED);
		lblErrorCampoObli.setBounds(10, 283, 338, 14);
		frmRegistrarUsuario.getContentPane().add(lblErrorCampoObli);
	}

	public boolean estaVacio(String valor) {

		if (valor != null && !valor.equals("")) {
			return true;

		}

		return false;

	}
}
